注:标记星号是会改变原对象的操作
*assign(复制对象到目标对象)
继承属性和不可枚举属性是不能拷贝的、对象浅拷贝。
1 | var obj = { name: 'may', age: 25 } |
*defineProperties(修改对象多个属性)
configurable
该属性可被改变和删除,enumerable
该属性可被枚举,writable
该属性值可写。默认值都为 false
。
对象的属性描述符分为:数据描述符 和 存取描述符
数据描述符可选键值:value
、writable
存取描述符可选键值:get
、set
数据描述符 和 存取描述符 不能共存
1 | var obj = { } |
*defineProperty (修改对象一个属性)
1 | var obj = { } |
entries(自身可枚举属性的键值对数组)
不会返回原型对象上的属性
1 | var obj = { name: 'may', age: 25 } |
fromEntries(键值对数组转化为对象)
大部分浏览器还未支持
1 | var map = new Map([['name', 'may'], ['age', 25]]) |
keys(返回自身可枚举属性组成的数组)
不会返回原型对象上的属性
如果获取一个对象的所有属性,,甚至包括不可枚举的,可使用 getOwnPropertyNames
方法
1 | var obj = { name: 'may', age: 25 } |
values(返回自身可枚举属性值组成的数组)
不会返回原型对象上的属性
1 | var obj = { name: 'may', age: 25 } |
*preventExtensions(使对象不可扩展)
不能添加新属性
1 | var obj = { name: 'may', age: 25 } |
*freeze(浅冻结对象)
不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举性、可配置性、可写性。
1 | var obj = { name: 'may' } |
*seal(密封对象)
阻止添加新属性并将所有现有属性标记为不可配置。当前属性的值只要可写就可以改变。
1 | var obj = { name: 'may' } |
isFrozen(对象是否冻结)
一个对象是冻结的是指它不可扩展,所有属性都是不可配置的,且所有数据属性(即没有getter或setter组件的访问器的属性)都是不可写的
1 | var obj = { name: 'may' } |
isSealed(对象是否密封)
密封对象是指那些不可扩展的,所有自身属性都不可配置且不可删除(但不一定是不可写)的对象
1 | var obj = { name: 'may' } |
isExtensible(对象是否可扩展)
冻结对象 和 密封对象 不可扩展
1 | var obj = { name: 'may' } |
propertyIsEnumerable(指定属性是否可枚举)
不包含原型链上的属性
1 | var obj = { name: 'may' } |
getOwnPropertyDescriptor(获取对象一个属性的属性描述符)
1 | var obj = { name: 'may' } |
getOwnPropertyDescriptors(获取对象自身属性的描述符)
1 | var obj = { name: 'may' } |
getOwnPropertyNames(获取对象自身属性属性名)
包含不可枚举属性,不包括Symbol值作为名称的属性
1 | var obj = { name: 'may', age: 25 } |
getOwnPropertySymbols(返回对象所有 Symbol 属性的数组)
1 | var obj = { name: 'may' } |
getPrototypeOf(返回对象原型)
1 | var obj = { name: 'may' } |
is(判断两个值是否相同)
1 | Object.is('foo', 'bar') // false |
hasOwnProperty(对象自身是否存在指定属性)
不包括原型链上属性
1 | var obj = { name: 'may' } |
isPrototypeOf(一个对象是否在另一个对象的原型链上)
1 | function Foo() {} |